/**

 @Name：layuiAdmin 
 @Author：flc
 @Site：http://www.layui.com/admin/
 @License：LPPL
    
 */

layui.define(['setter','form','table','laydate'],function(exports){
    //全局使用。即所有弹出层都默认采用，但是单个配置skin的优先级更高
    layer.config({
        skin: 'btn-class'
    })
  var  form = layui.form,
      setter = layui.setter,
      table = layui.table,
      laydate = layui.laydate,
      $ = layui.jquery,
      DEFAULTPROPS={
          STARTTIME:'input-start-time',
          ENDTIME:'input-end-time',
          FIELDNAME:'fieldname',
          TIMEINITNAME:'time-init',
      },
  commons = {
    /*{

      适用于数据提交  add  edit

      url  请求地址 必填
      name  事件名 必填
      ajaxCallback 回调方法
      formCallback form 回调

    }*/

    update: function(props){
        var _this = this;
        if(props.name && ( props.url || props.path)){
          form.on(props.name, function(data) {
            typeof props.formCallback == "function" ? props.formCallback(data) : null;
            _this.commonAjax({
              url: props.url || null,
              path: props.path || null,
              data: JSON.stringify(data.field),
              callback: function(datas){
                  typeof props.updateCallback == "function" ? props.updateCallback(datas) : _this._success(datas);
              }
            });
          });
        }
    },

    /*
      url 请求地址
      data 接口调用参数
      method 请求方式
      ajaxCallback 请求完成回调
    */
    deleteData: function(props){
      var _this = this;
      if(props.data &&( props.url || props.path)){
          _this.commonAjax({
            url: props.url || null,
            path: props.path || null,
            data: props.data,
            method: props.method || null,
            callback: function(data){
                typeof props.ajaxCallback == "function" ? props.ajaxCallback(data) : null;
            }
          });
      }
    },

      /* 
        name 回显表单名称
        path 接口调用全路径
        url 机构调用半路径
        ajaxCallback 回调
        data 参数
        method 默认 post 如需get 加入参数即可
      */
    dataEcho: function(props){
      if(props.name &&( props.url || props.path) && props.data){
        var _this = this;
        this.commonAjax({
          url:  props.url || null,
          path: props.path || null,
          data: props.data,
          method: props.method || null,
          callback: function(data){
            typeof props.ajaxCallback == "function" ? props.ajaxCallback(data) : null;
            // 表单赋值
             for(val in data.data){
               if(_this._isInteger(data.data[val])){
                data.data[val] = data.data[val].toString();
               }
             }
             form.val(props.name, data.data);
          }
        });
      }
    },


    // ajax 共用 
    commonAjax:function(props){
      if(props.data &&( props.url || props.path)){
        $.ajax({
          url:props.path ? props.path : serverPath.systemPath + setter.sysLinkPath + props.url,
          type: props.method ? props.method : "POST",
          contentType: 'application/json',
          dataType: 'json',
          data: props.data,
          success: function(data) {
            typeof props.callback == "function" ? props.callback(data) : null;
          },
          error: function(XMLHttpRequest, textStatus, errorThrown) {
            layer.alert("失败！" + XMLHttpRequest.status);
          },
        });
      }
    },


    /* 
      update success 默认返回
      data 返回值
    
    */
    _success:function(data){
      var _this = this;
      if (_this._filterRecord(data)) {
        window.parent.layer.alert(data.msg, function() {
          _this._bulletWindow(window.parent.index);
          window.parent.layui.index.render();
        });
      } else {
        window.parent.layer.alert(data.msg);
      }
    },

    // 判断是否为整形
    _isInteger:function(obj) {
      return typeof obj === 'number' && obj%1 === 0;
    },
    
    // 过滤返回值
    _filterRecord: function(data){
      // code 0 数据正常
      return data.code === 0 ? true : false ;
    },
    _bulletWindow: function(index){
      window.parent.layer.close(index);
    },
//判断是否tab页    表格布局
    tabHeight:function(tableH,val,data){
        var isTab=localStorage.getItem('pageTabs') ;
        if(isTab){
            //$(val).height($(document).height()-186);
           // $(data).height($(document).height()-216);
            return  tableH='full-20';
        }else{
            return  tableH='full-70';
        }
    },

    //获取url值  单个值
    getQueryByName: function(name) {
      var url = window.location.href;
      var reg = new RegExp('[?&]' + name + '=([^&#]+)');
      var query = url.match(reg);
      return query ? query[1] : null;
    },

    //弹窗关闭  子页面关闭按钮
    bulletWindow: function (index){
      window.parent.layer.close(index);
    },


    //设置cookie
    setCookie:function(key,val,time){//设置cookie方法
      var date=new Date(); //获取当前时间
      var expiresDays=time;  //将date设置为n天以后的时间
      date.setTime(date.getTime()+expiresDays*24*3600*1000); //格式化为cookie识别的时间
      document.cookie=key + "=" + val +";expires="+date.toGMTString();  //设置cookie
    },
    getCookie:function(key){//获取cookie方法
      /*获取cookie参数*/
      var getCookie = document.cookie.replace(/[ ]/g,"");  //获取cookie，并且将获得的cookie格式化，去掉空格字符
      var arrCookie = getCookie.split(";")  //将获得的cookie以"分号"为标识 将cookie保存到arrCookie的数组中
      var tips;  //声明变量tips
      for(var i=0;i<arrCookie.length;i++){   //使用for循环查找cookie中的tips变量
        var arr=arrCookie[i].split("=");   //将单条cookie用"等号"为标识，将单条cookie保存为arr数组
        if(key==arr[0]){  //匹配变量名称，其中arr[0]是指的cookie名称，如果该条变量为tips则执行判断语句中的赋值操作
          tips=arr[1];   //将cookie的值赋给变量tips
          break;   //终止for循环遍历
        }
      }
      return tips;
    },
    deleteCookie:function(key){ //删除cookie方法
      var date = new Date(); //获取当前时间
      date.setTime(date.getTime()-10000); //将date设置为过去的时间
      document.cookie = key + "=v; expires =" +date.toGMTString();//设置cookie
    },

  //上下移动
    changepos:function(obj, index) {
    var element = obj.parentNode.previousElementSibling.childNodes[1];
    //选中项索引值
    var selectedIndex = element.options.selectedIndex;
    var selText = element.options[selectedIndex].text;
    var selValue = element.options[selectedIndex].value;
    //上移，上移时将选中项数据与上一条option数据进行交换
    if (index == -1) {
      if (selectedIndex > 0) {
        element.options[selectedIndex].text = element.options[selectedIndex - 1].text;
        element.options[selectedIndex].value = element.options[selectedIndex - 1].value;
        element.options[selectedIndex].selected = false;
        element.options[selectedIndex - 1].text = selText;
        element.options[selectedIndex - 1].value = selValue;
        element.options[selectedIndex - 1].selected = true;
      }
    }
    //下移，下移时将选中项数据与下一条option数据进行交换
    else if (index == 1) {
      if (selectedIndex < element.options.length - 1) {
        element.options[selectedIndex].text = element.options[selectedIndex + 1].text;
        element.options[selectedIndex].value = element.options[selectedIndex + 1].value;
        element.options[selectedIndex].selected = false;
        element.options[selectedIndex + 1].text = selText;
        element.options[selectedIndex + 1].value = selValue;
        element.options[selectedIndex + 1].selected = true;
      }
    }
    else if(index==2){
        if (selectedIndex > 0) {
            element.options[selectedIndex].text = element.options[0].text;
            element.options[selectedIndex].value = element.options[0].value;
            element.options[selectedIndex].selected = false;
            element.options[0].text = selText;
            element.options[0].value = selValue;
            element.options[0].selected = true;
        }
    }
    else if(index==3){
        if (selectedIndex < element.options.length - 1) {
            element.options[selectedIndex].text = element.options[element.options.length - 1].text;
            element.options[selectedIndex].value = element.options[element.options.length - 1].value;
            element.options[selectedIndex].selected = false;
            element.options[element.options.length - 1].text = selText;
            element.options[element.options.length - 1].value = selValue;
            element.options[element.options.length - 1].selected = true;
        }
    }
  },

    //密码强弱判断
    pwdChange:function(v) {
    var num = 0;
    var reg = /\d/; //如果有数字
    if (reg.test(v)) {
      num++;
    }
    reg = /[a-zA-Z]/; //如果有字母
    if (reg.test(v)) {
      num++;
    }
    reg = /[^0-9a-zA-Z]/; //如果有特殊字符
    if (reg.test(v)) {
      num++;
    }
    if (v.length < 6) { //如果密码小于6
      num--;
    }
    return num;
  },
    pwdChangenum:function(num){
    var tds = document.getElementsByClassName("pwdLever")[0].getElementsByTagName("td");
    //修改密码颜色
    if (num == 0 || num == 1) {
      tds[0].style.backgroundColor = "red";
      tds[1].style.backgroundColor = "gray";
      tds[2].style.backgroundColor = "gray";
    }
    else if (num == 2) {
      tds[0].style.backgroundColor = "red";
      tds[1].style.backgroundColor = "red";
      tds[2].style.backgroundColor = "gray";
    }
    else if (num == 3) {
      tds[0].style.backgroundColor = "red";
      tds[1].style.backgroundColor = "red";
      tds[2].style.backgroundColor = "red";
    }
    else {
      tds[0].style.backgroundColor = "gray";
      tds[1].style.backgroundColor = "gray";
      tds[2].style.backgroundColor = "gray";
    }
  },

      // table重载
      tableReload:function(props){
          if(props.name){
              table.reload(props.name, {
                  where:props.where||{},
                  page: {
                      curr: 1,
                  }
              });
          }
      },
      /*刷新时间控件*/
      //istype   判断是什么类型  传值为datetime  不传为date
      reflashDate: function(props,isType) {
          var dataType="date";
          if(isType){
              dataType='datetime'
          }
          if(props.startName && props.endName){
              var nowTime = new Date().valueOf();
              var start = laydate.render({
                  elem: props.startName,
                  type: dataType,
                  max: new Date().valueOf(),
                  done: function (value, date, endDate) {
                      endMax = end.config.max;
                      end.config.min = date; //最大时间为结束时间的开始值  
                      end.config.min.month = date.month - 1;
                      $(props.startName).val(value);
                  }
              });
              var end = laydate.render({
                  elem: props.endName,
                  type: dataType,
                  max: 4073558400000,
                  format: 'yyyy-MM-dd',
                  done: function (value, date) {
                      if ($.trim(value) == '') {
                          var curDate = new Date();
                          date = {
                              'date': curDate.getDate(),
                              'month': curDate.getMonth() + 1,
                              'year': curDate.getFullYear()
                          };
                      }
                      start.config.max = date; //最小时间为开始时间的最大值  
                      start.config.max.month = date.month - 1;
                      $(props.endName).val(value);
                  }
              });
          }
      },
      // 检索表格内是否存在start end 时间
      queryToolbar:function(props){
          if(props.name){
              var start = $('[lay-id='+props.name+'] input[class*='+DEFAULTPROPS.STARTTIME+']');
              var end = $('[lay-id='+props.name+'] input[class*='+DEFAULTPROPS.ENDTIME+']');
              if(start.length > 0 && end.length>0){
                  this.reflashDate({
                      startName:'[lay-id='+props.name+'] input[class*='+DEFAULTPROPS.STARTTIME+']',
                      endName:'[lay-id='+props.name+'] input[class*='+DEFAULTPROPS.ENDTIME+']'
                  })
              };
          }
      },

      // 检索表格头部所有搜索值
      queryHeaderVal: function (props) {
          var params = {
              propslist:{},
              eaholist:{},
          };
          if(props.name){
              var list = $('[lay-id='+props.name+'] ['+DEFAULTPROPS.FIELDNAME+'');
              for(var i =0;i<list.length;i++){
                  params.propslist[$(list[i]).attr(DEFAULTPROPS.FIELDNAME)] = props.type ==='1' ? '':$(list[i]).val();
                  params.eaholist[$(list[i]).attr('name')] =  props.type ==='1' ? '':$(list[i]).val();
              }
          }
          return params;
      },



      // 时间转化
      parTime:function(m) {
          return m < 10 ? '0' + m : m
      },
      timeData: function(date,type) {
          if (!date) {
              return "";
          }
          var time = new Date(date);
          var y = time.getFullYear();
          var m = time.getMonth() + 1;
          var d = time.getDate();
          if(type === '1'){
              var h = time.getHours();
              var mm = time.getMinutes();
              var s = time.getSeconds();
              return y + '-' + parTime(m) + '-' + parTime(d) + ' ' + parTime(h) + ':' + parTime(mm) + ':' + parTime(s);
          }else if(type === '2'){
              var h = time.getHours();
              var mm = time.getMinutes();
              var s = time.getSeconds();
              return parTime(h) + ':' + parTime(mm) + ':' + parTime(s);
          }else{
              return y + '-' + this.parTime(m) + '-' + this.parTime(d);
          }
      },

      // 表单内时间初始化
      formInfoTimeInit:function (props) {
          var list = $('[lay-filter*='+props+'] .'+DEFAULTPROPS.TIMEINITNAME+'');
          var arr = [];
          for(var i = 0; i<list.length;i++){
              laydate.render({
                  elem: '.'+$(list[i]).attr('name')
              });
              arr.push($(list[i]).attr('name'));
          }
          return arr
      },
      formEcho: function(props){
          if(props.name &&( props.url || props.path) && props.data){
              var _this = this;
              this.commonAjax({
                  url:  props.url || null,
                  path: props.path || null,
                  data: props.data,
                  method: props.method || null,
                  callback: function(data){
                      typeof props.ajaxCallback == "function" ? props.ajaxCallback(data) : null;
                      // 表单赋值

                      for(val in data.data){
                          if(_this._isInteger(data.data[val])){
                              data.data[val] = data.data[val].toString();
                          }
                      }
                      form.val(props.name, data.data);
                  }
              });
          }
      },



      // 表单验证正则
      formVerify:{
          names: function(value, item){ //value：表单的值、item：表单的DOM对象   名称
              if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                  return '名称不能有特殊字符';
              }
              if( !(/^\S{2,32}$/.test(value))){
                  return '名称为2到32位';
              }
              if(/(^\_)|(\__)|(\_+$)/.test(value)){
                  return '名称首尾不能出现下划线\'_\'';
              }
              if(/^\d+\d+\d$/.test(value)){
                  return '名称不能全为数字';
              }
          },
          alias: function(value, item){//别名
              if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                  return '别名不能有特殊字符';
              }
              if( !(/^\S{2,32}$/.test(value))){
                  return '别名为2到32位';
              }
              if(/(^\_)|(\__)|(\_+$)/.test(value)){
                  return '别名首尾不能出现下划线\'_\'';
              }
              if(/^\d+\d+\d$/.test(value)){
                  return '别名不能全为数字';
              }
          },
          category: function(value, item){//分类
              if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5]+$").test(value)){
                  return '角色分类不能有特殊字符';
              }
              if( !(/^\S{2,32}$/.test(value))){
                  return '角色分类为2到32位';
              }
              if(/(^\_)|(\__)|(\_+$)/.test(value)){
                  return '角色分类首尾不能出现下划线\'_\'';
              }
              if(/^\d+\d+\d$/.test(value)){
                  return '角色分类不能全为数字';
              }
          },
          defaultUrl:function (value, item) {//url路径地址
              if( /^[\u4e00-\u9fa5]$/.test(value)){
                  return '地址不能为中文';
              }
          },
          sort:function (value, item) {//排序
              if( !(/^[0-9]*$/.test(value))){
                  return '排序只能为数字';
              }
          },
          staffing:function (value, item) {//排序
              if( !(/^[0-9]*$/.test(value))){
                  return '编制人数只能为数字';
              }
          },
          orgCode:function(value, item){//组织代码
              if( !(/^[0-9a-zA-Z]+$/.test(value))){
                  return '组织代码只能是数字和英文';
              }
          },
          idCard:function (value, item) {
              if(!(/^\d{17}[\d|X]$/.test(value))&&value.length>0){
                  return '身份证输入不合法';
              }
          },
          email:function(value, item){
              if(!(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value))&&value.length>0){
                  return  '邮箱格式不正确'
              }
          },
          mobile:function (value,item) {
              if(!(/^1\d{10}$/.test(value))&&value.length>0){
                  return '请输入正确的手机号';
              }
          },
          phone:function (value,item) {
              if(!(/^0\d{2,3}-?\d{7,8}$/.test(value))&&value.length>0){
                  return '请输入正确的电话号码';
              }
          },
          repass: function(value){
              if(value !== $('#LAY_password').val()){
                  return '两次密码输入不一致';
              }
          },
          nickname: function(value, item){ //value：表单的值、item：表单的DOM对象
              if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){
                  return '用户名不能有特殊字符';
              }
              if(/(^\_)|(\__)|(\_+$)/.test(value)){
                  return '用户名首尾不能出现下划线\'_\'';
              }
              if(/^\d+\d+\d$/.test(value)){
                  return '用户名不能全为数字';
              }
          },
          title: function(value){
              if(value.length < 5){
                  return '标题至少得5个字符啊';
              }
          }
          ,pass: [
              /^[\S]{6,18}$/
              ,'密码必须6到18位，且不能出现空格'
          ]
          //ipv4
          ,IPv4:[
              /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
              ,'请输入正确IP地址'
          ]
          // 5至11位
          ,QQnumber:[
              /^[1-9][0-9]{4,10}$/
              ,'请输入正确QQ号码'
          ]
          //微信号，6至20位，以字母开头，字母，数字，减号，下划线
          ,WXnumber:[
              /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
              ,'请输入正确微信号码'
          ]
          // 车牌号码
          ,carNumber:[
              /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
              ,'请输入正确车票号码'
          ]
      }


  };
  //对外暴露的接口
  exports('commons', commons);
});